//  MayBe 函子： 解决空值情况

class MayBe {
    static of (value) {
        return new MayBe(value)
    }

    constructor (value){
        this._value = value
    }

    map(fn){
        return this.isNothing() ?  MayBe.of(null) : MayBe.of(fn(this._value))
    }

    isNothing(){
        return this._value === null || this._value === undefined
    }

}

// const r = MayBe.of('husky').map(v=>v.toUpperCase() )
// const r = MayBe.of(null)
//             .map(v=>v.toUpperCase() )
// console.log(r)

// 新问题： 多次链式调用中间一个传null， 如何去确定是哪个链式调用出现问题
const r = MayBe.of('husky')
            .map(v=>v.toUpperCase() )
            .map(v=>null)
            .map(v=>v.toUpperCase() )
console.log(r)